// seeders-waterfallv1.0
; (function ($) {

    jQuery.fn.waterFall = function (options) {
        //1.声明一个对象,给每个图片盒子设置属性
        var defaults = {
            //间距
            spacing: 15
        }

        //2.通过$.extends()进行拓展
        defaults = $.extend(defaults,options);
        //3.找到每个盒子元素
        var $this = $(this)//items 盒子
        var item = $this.children()
        // console.log(item)
        //4.算出瀑布流的列数(每行能放几张图片 =  父容器盒子宽度 / item的宽度)
        //图片盒子宽度
        var itemWidth = item.width()
        //图片盒子高度
        var itemHight = 0
        var column = Math.floor($this.width() / itemWidth)

        //6.寻找一行中高度最小的那一列的位置，以及这一列的高度值
        var arrHeight = [];

        //5.遍历每个小盒子，设置定位的top 和left值
        item.each(function (index, element) {
            //6.1获取每一列的高度值
            itemHight = $(element).height()
            //5.1 确定第一行的图片盒子排列
            if (index < column) {
                $(element).css({
                    top: 0,
                    left: (itemWidth + defaults.spacing) * index
                })

                //6.2把第一行中的每个图片的高度保存到数组中去
                arrHeight[index] = itemHight
            } else {
                //7.计算其他行的最小值以及索引值,封装一个方法，方便获取
                function getMin(arr) {
                    var min = {}
                    min.index = 0 //最小值索引默认为0
                    min.value = arr[min.index] //最小值

                    //遍历数组中的每一项获取数组中最小值以及对应的索引值
                    for (var i = 0; i < arr.length; i++) {
                        if (arr[i] < min.value) {
                            min.value = arr[i]
                            min.index = i
                        }

                    }
                    //返回给这个函数
                    return min

                }
                var min_value = getMin(arrHeight).value;
                var min_index = getMin(arrHeight).index;
                // console.log(arrHeight)
                // console.log(min_value)
                // console.log(min_index)

                //设置下一行的top值和left值
                $(element).css({
                    top: min_value + defaults.spacing,
                    left: (itemWidth + defaults.spacing) * min_index
                })
                //要更新列，也就是重新计算最小值和索引值
                arrHeight[min_index] += itemHight + defaults.spacing
            }
        })

        //8 获取最大列的高度，把高度赋值给父容器items
        function getMax(arr){
            var max = {}
            max.index = 0 //最大值索引默认为0
            max.value = arr[max.index] //最大值
            for (var i = 0; i < arr.length; i++) {
                if (arr[i] > max.value) {
                    max.value =arr[i]
                    max.index = i
                }

            }
            return max;
        }

        var max_value = getMax(arrHeight).value;//最大值
        $this.height(max_value)


    };


})(jQuery);